package com.example.springboot.service;

import cn.hutool.core.util.StrUtil;
import com.example.springboot.entity.User;
import com.example.springboot.exception.ServiceException;
import com.example.springboot.mapper.UserMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/*
 * 功能：service层对数据进行逻辑处理，返回给controller层
 * 日期：2024-3-22 22:22
 * 作者：RabbitQ
 */

@Service //将其注入到spring容器中
public class UserService {

    @Resource
    UserMapper userMapper;

    //新增用户
    public void insertUser(User user) {
        userMapper.insert(user);
    }

    //更新用户信息
    public void updateUser(User user) {
        userMapper.updateUser(user);
    }

    //删除用户信息
    public void deleteUser(Integer id) {
        userMapper.deleteUser(id);
    }

    //循环调用单个删除
    //如果数据量太大，需要改进一下，负责运行效率较低
    public void batchDelete(List<Integer> id_all) {
        for (Integer id : id_all) {
            userMapper.deleteUser(id);
        }
    }

    //查询全部用户信息
    public List<User> selectAll() {
        return userMapper.selectAll();
    }

    //查询-根据username和name查询
    public List<User> select_By_name_username(String username, String name) {
        return userMapper.select_By_name_username(username, name);
    }

    //登录
    //校验用户账户合法性
    public User login(User user) {
        User user_db = userMapper.selectByUsername(user.getUsername()); //根据用户名从数据库中检索是否有这个账号

        //如果为空，抛出自定义异常
        if (user_db == null) {
            throw new ServiceException("用户名或密码错误"); //throw出去被GlobalException捕获到，进行处理
        }
        //密码匹配
        if (!user.getPassword().equals(user_db.getPassword())) {
            throw new ServiceException("用户名或密码错误"); //throw出去被GlobalException捕获到，进行处理
        }

        return user_db;
    }

    //注册
    public User register(User user) {
        //查询如果有相同用户名则抛出错误
        if (userMapper.selectByUsername(user.getUsername()) != null) {
            throw new ServiceException("用户名已存在");
        }

        userMapper.insert(user);
        return null;
    }

    //通过用户名查找用户
    public User selectByUsername(String username) {
       return userMapper.selectByUsername(username);
    }


    //用户管理界面——通过用户名及用户角色筛选

    public List<User> selectByUsernameRole(String username, String role) {

        if(!StrUtil.isBlank(username) && StrUtil.isBlank(role)){
            return userMapper.selectByUsernameList(username);
        }else if( StrUtil.isBlank(username) && !StrUtil.isBlank(role)){
            return userMapper.selectByRole(role);
        }else{
            return userMapper.selectByUsernameRole(username, role);
        }
    }

    //用户管理界面——通过用户id更新用户信息
    public void updateUserByID(User userOne) {
        userMapper.updateUserByID(userOne);
    }

    //个人信息修改界面——通过用户名称修改个人信息
    public void updateUsername(User user) {
        userMapper.updateUserByUsername(user);
    }

}
